2025.3.19 RNN【torch】
code:format.py
class torch.nn.RNN(input_size, hidden_size, num_layers=1, nonlinearity='tanh', bias=True, batch_first=False, dropout=0.0, bidirectional=False, device=None, dtype=None)
input_size ... 入力xに含まれる特徴の数
hidden_size ... 隠れ状態 h の数
num_layers=1 ... 再帰層の数
nonlinearity='tanh' ... 活性化関数の種類、tanh、reluなど
bias=True ... バイアスの有無
batch_first=False ... Trueにすると入力と出力テンソルの数の並びを(seq, batch, feature)から(batch, seq, feature)に変更する
dropout=0.0 ... ドロップアウト層の確率
bidirectional=False ... 双方向RNNにする
device=None ... CPU, GPUの違いか?
dtype=None ... データ型
パラメータ:
$ N ... バッチサイズ
$ L ... シーケンス長
$ D ... 双方向の場合$ 2、さもなくば$ 1
$ H_{in} ... 入力サイズ
$ H_{out} ... 出力サイズ
Input:
input ...
バッチ処理なし:$ (L, H_{in})のテンソル
バッチ処理あり:$ (L, N, H_{in}) または$ (N, L, H_{in})のテンソル
hx ... 隠れ状態の初期値を指定するためのテンソル、与えなければ0で初期化される。
バッチ処理なし:$ (D\times {\rm num\_layers}, H_{out})
バッチ処理あり:$ (D\times {\rm num\_layers}, N, H_{out})
Returns:
output ...
バッチ処理なし:$ (L, D, H_{out})のテンソル
バッチ処理あり:$ (L, N, D\times H_{out})のテンソルを渡す
hx ...
バッチ処理無し:(D×num_layers, H)
バッチ処理あり:(D×num_layers, N, H)
入力データは3Dのarray-like型である。モノラル音響信号のような1列の特徴量であれば
(バッチ数、時刻、特徴量)
のように並べた信号を与える(ただしbatch_first=True)
https://scrapbox.io/files/680311a1a898360eeb4720ee.png
教師データは
(バッチ数、教師データ)
の2Dデータとなる。
上のように多次元テンソルを図として解釈するとむしろややこしい。
軸
code:fig.txt
┌───┐
┌───┐
┌───┐ 0 │
│ 0 │ 1 │
│ 1 │ 2 │
│ 2 │ : │
│ : │ n │
│ n │ ──┘
└───┘